package com.company.designmode.create.single;

public class TestDemo {
    public static void main(String[] args) {


        //懒汉且多线程不安全的单例，一般情况下，不建议使用
        LazySingletonNoSync lsn = LazySingletonNoSync.getInstance();
        lsn.showMessage();

        //懒汉且线程安全的单例，一般情况下，不建议使用
        LazySingletonSync lss = LazySingletonSync.getInstance();
        lss.showMessage();

        //饿汉式单例，一般情况下，建议使用
        HungrySingleton inst = HungrySingleton.getInstance();
        inst.showMessage();

        //双检锁式单例
        SingletonDCL dcl = SingletonDCL.getInstance();
        dcl.showMessage();

        //静态内部类式单例，只有在要明确实现 lazy loading 效果时，才会使用
        SingletonISC isc = SingletonISC.getInstance();
        isc.showMessage();

        //枚举式单例，如果涉及到反序列化创建对象时，可以尝试使用
        SingletonEnum sem = SingletonEnum.INSTANCE;
        sem.showMessage();
    }
}
